iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
1
Microsoft Azure

利用Python開發一個以Azure服務為基底的Chat Bot系列 第 23

【Day23】Microsoft Bot Framework 中 Dialog 的概念及應用

  • 分享至 

  • xImage
  •  

今天要來介紹甚麼是對話中的 Dialog。

甚麼是 Dialog

Dialog 實際給 user 的使用感覺就像 chatbot 在執行某一個功能而外產生的小框框,進入小框框後,user 會被引導回答一系列的問題,但這些問題都是跟某一個主題有關。

舉例,如果我向一個智能機器人傳送出「我要預訂車票」的指令,則 user 理當需要回覆以下的問題:

  • 日期
  • 時間
  • 車票種類
  • 乘車地點
  • 目的地
  • 乘車者姓名
  • 手機號碼

Dialog 應用場景就是在日常生活需要填寫一連串資料、回覆一系列問題,這類問題如果要單純用 Bot Framework 實作,就需要導入 Dialog 這種而外的小框框概念,使用者回覆完小框框的問題,才可以回到最一開始的 bot.py 內的 on_message_activity()內的邏輯

Bonus: 如果可以導入 Bot Framework 以外的技術,LUIS 會是一個不錯的解決方案。

但是如果此機器人不只有預訂車票的功能,還具有「叫外賣」的功能,那就更適合使用 Dialog。叫外賣也會需要顧客提供以下的資料:

  • 買家姓名
  • 買家手機號碼
  • 外送地點
  • 外送餐點
  • 而外備註

如果我們要實作具有「預訂車票」、「叫外賣」兩種功能的智慧機器人,那使用 Dialog 在原先的對話中開一個小框框(感覺上的),最適合不過。當 chatbot 判斷出 user 要「叫外賣」,就開啟「叫外賣」小框框,當使用者回答完小框框一系列的問題後,再跳出小框框,等候下一個指令(預訂車票、叫外賣等其他指令)。

而且「預訂車票」、「叫外賣」這兩種功能,都是需要向 user 索取固定的資訊,針對不同顧客幾乎都是問相同一系列的問題,所以使用 Dialog 而外開一個小框框完全滿足當前的使用場景。

小總結
1. Dialog 是一種而外開啟小框框的概念
2. 小框框的問句都是引導使用者回覆一系列完成某一個指令需要的資訊
3. 若想要實作多功能的智慧機器人,使用 Dialog 會是一個不錯的解決方案

一些使用案例

案例一

單一功能的 Dialog

這是一個簡單詢問使用者資訊的 Dialog。

  • DialogHelper 是用來開啟 Dialog 小框框的 class,內含有 run_dialog() 這個方法
  • bot.py 裡的 on_message_activity() 會有 run_dialog(),只要這個方法出現,就代表此時此刻在 Dialog(UserProfileDialog) 的小框框裡
  • Dialog 裡有很多個 step,就是索取重要資訊的每一個步驟

詳細的 code 請參考: https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/python/05.multi-turn-prompt

圖片來源: https://docs.microsoft.com/zh-tw/azure/bot-service/bot-builder-dialog-manage-conversation-flow?view=azure-bot-service-4.0&tabs=python

案例二

多功能的 Dialog

這是一個比較複雜的階層 Dialog。

  • 一樣是 run_dialog() 開啟小框框
  • 透國程式邏輯撰寫的方式,可以讓使用者在 3 個不同的 Dialog 重複遊走

詳細 code 請參考: https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/python/43.complex-dialog

圖片來源: https://docs.microsoft.com/zh-tw/azure/bot-service/bot-builder-dialog-manage-complex-conversation-flow?view=azure-bot-service-4.0&tabs=python

一些簡單的學理知識

https://ithelp.ithome.com.tw/upload/images/20201008/20129689KvJLCaFN1T.png

Dialog 基本上可以分成三種:

  • Prompt: 兩步驟的 Dialog
  • Waterfall: 瀑布式的 Dialog,可將多個步驟結合成一個序列,讓 Bot 能夠輕鬆地遵循該預先定義的序列,上述「預訂車票」、「叫外賣」一連串的問題,就是瀑布式的 Dialog
  • Component: 可重複使用的 Dialog,以便使用於不同的案例中,例如要求使用者提供街道、城市和郵遞區號值的地址的 Dialog

以上是今天想要分享的內容,Dialog 算是使用 Bot Framework 建立智障機器人與智慧機器人得分水嶺,我當時自學這邊也看了一段時間,才搞懂這邊的邏輯,大家如果有問題可以多多討論。


上一篇
【Day22】改變 Chatbot 儲存資料的位置
下一篇
【Day24】Dialog 中 Prompt 的種類
系列文
利用Python開發一個以Azure服務為基底的Chat Bot30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言